This example consists of the following source files, located in the src directory:

ipo_sample_defs.h
Contains function prototypes init and sum
ipo_sample_main.c
Main program
ipo_sample_init.c
Contains function init
ipo_sample_sum.c
Contains functions add3 and sum

The example demonstrates using the Multi-file Interprocedural Optimization (IPO) feature of the Intel® C++ Compiler. When this option is enabled, each source file is first compiled to an intermediate representation. Then, when the application is linked, the compiler is called again to bring together all of the intermediate representation and optimize it as a whole. This allows the optimizer to make better choices of generated code and to inline smaller functions.

In this program, there are three small functions and a main program across three source files. With IPO, it is as if all three files were compiled from a single source file and extensive optimization is possible. Here, the subroutine and two functions are completely inlined into the main program, exposing more optimization opportunities and eliminating call overhead.

To see the effect of IPO it is best to view the optimization report. If you are using the Microsoft Visual Studio* solution provided for Windows*, the project is set to do this automatically. Just build the solution and then open the source file ipo_sample_main.c. Embedded in the source display will be notes about optimizations performed, including inlining. You can also click on the Compiler Inline Report or Compiler Optimization Report tabs to see additional information.

If building from the command line, you can open the optimization report in a text editor. The build script or makefile places the report in ipo_sample.optrpt. Note that the build script and makefile specifies the IPO option (/Qipo or -ipo) on both the compile and the link step and that the icl command must be used for linking as this adds the pre-link optimization phase. The options for the optimization report need be on the link step only.

The optimization report indicates the functions that are inlined and that the now unneeded ("dead") functions are deleted from the code.

To build from the command line on Windows, use build.bat. Arguments are 'build' or 'clean' - the default is 'build'. On Linux* or macOS*, use make to compile and link. After the build completes, open ipo_sample.optrpt in a text editor. Use the command ./ipo_sample.out to run the program.